package org.edu.common;

import java.io.Serializable;
import java.util.LinkedHashMap;

/**
 * 通用DAO
 * @author lzh
 *
 * @param <E>
 */
public interface DAO<T> {
	/**
	 * 保存实体
	 * @param entity 实体
	 */
	void save(T e);
	/**
	 * 删除实体
	 * @param id 实体标识
	 */
	void delete(Serializable... ids);
	/**
	 * 查询实体
	 * @param id
	 */
	T find(Serializable id);
	/**
	 * 分页查询
	 * @param firstResult 开始索引
	 * @param maxResult 最大记录数
	 * @param where条件
	 * @param params where条件参数值
	 * @param orderByMap order by 排序条件 
	 */
	QueryResult<T> getQueryResult(final int firstResult,final int maxResult,final String condition
			,final Object[] params,final LinkedHashMap<String,String> orderByMap);
	/**
	 * 分页查询
	 * @param firstResult 开始索引
	 * @param maxResult 最大记录数
	 * @param where条件
	 * @param params where条件参数值
	 */
	QueryResult<T> getQueryResult(final int firstResult,final int maxResult,final String condition,final Object[] params);
	/**
	 * 分页查询
	 * @param firstResult 开始索引
	 * @param maxResult 最大记录数
	 * @param orderByMap order by 排序条件 
	 */
	QueryResult<T> getQueryResult(final int firstResult,final int maxResult,final LinkedHashMap<String,String> orderByMap);
	/**
	 * 分页查询
	 * @param firstResult 开始索引
	 * @param maxResult 最大记录数
	 */
	QueryResult<T> getQueryResult(final int firstResult,final int maxResult);
	/**
	 * 查询所有数据
	 */
	QueryResult<T> getQueryResult();
	
}
